如何实现一个 plugin 插件
- 基于 tapable 扩展出的,事件广播
- 插件 time-webpack-plugin
js
class TimePlugin {
constructor() {
console.time("time");
}
apply(compiler) {
compiler.hooks.afterEmit.tapAsync("TimePlugin", (compilation, callback) => {
console.timeEnd("time");
callback();
});
}
}
module.exports = TimePlugin;
- 配置文件
js
const TimePlugin = require("./time.webpack");
// ....
config.plugins.push(new TimePlugin());
js
let compiler = new Compiler({});
// 加载插件
if (options.plugins && Array.isArray(options.plugins)) {
for (const plugin of options.plugins) {
plugin.apply(compiler);
}
}